package de.wittekind.bundesjugendspiele.client.management.ui;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.InputMismatchException;
import java.util.concurrent.Executors;

import javax.swing.JFrame;
import javax.swing.JProgressBar;

import de.wittekind.bundesjugendspiele.client.management.conf.Constants;
import de.wittekind.bundesjugendspiele.client.management.model.CSVLoader;
import de.wittekind.bundesjugendspiele.client.management.model.LocalSchueler;
import de.wittekind.bundesjugendspiele.client.management.model.SchuelerSorter;
import de.wittekind.bundesjugendspiele.client.management.ui.view.BujuNode;
import de.wittekind.bundesjugendspiele.client.management.ui.view.MainView;
import de.wittekind.bundesjugendspiele.client.management.ui.view.RiegeDetailView;
import de.wittekind.bundesjugendspiele.client.management.ui.view.SchuelerDetailView;
import de.wittekind.bundesjugendspiele.server.interfaces.Riege;
import de.wittekind.bundesjugendspiele.server.interfaces.RiegenLoader;
import de.wittekind.bundesjugendspiele.server.interfaces.Schueler;

public class UIController {

	Schueler activeSchueler;
	Riege activeRiege;
	RiegenLoader loader;
	MainView main;
	
	public UIController() {

		main = new MainView(this);
		JProgressBar b = new JProgressBar();
		b.setIndeterminate(true);
		b.setSize(100, 10);
		
	}

	public void openWindow(RiegenLoader l) {
		loader = l;

		try {
			loadRiegenView(l);
			main.setVisible(true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void loadRiegenView(RiegenLoader l) throws IOException {
		for (int i = 1; i <= loader.getRiegenAmount(); i++) {
			Riege r = loader.getRiege(i);
			BujuNode riegenNode = new BujuNode(r, i);
			main.addBujuNode(riegenNode, false, true);

			int[] IDs = r.getSchuelerIDs();

			for (int j = 0; j < IDs.length; j++) {
				main.addBujuNode(new BujuNode(r.getSchueler(IDs[j]), r),
						false, false);
			}

		}
		main.refresh();

	}

	public boolean newRiege() {

		try {
			int i = loader.newRiege();
			Riege r = loader.getRiege(i);
			BujuNode b = new BujuNode(r, i);
			main.addBujuNode(b, true, true);
			main.displayNode(b);
		} catch (IOException e) {
			e.printStackTrace();
			return !main.showError(Constants.msg
					.getString("serverNotConnected"));
		}
		return true;
	}

	public boolean newSchueler() {

		try {
			BujuNode b = new BujuNode(null, activeRiege);
			main.addBujuNode(b, true, true);
			main.displayNode(b);
		} catch (IOException e) {
			e.printStackTrace();
			return !main.showError(Constants.msg
					.getString("serverNotConnected"));
		}
		return true;
	}

	public boolean save() {
		if (activeSchueler != null)
			return saveSchueler();
		return saveRiege();
	}

	public boolean saveSchueler() {
		System.out.println("saving schueler");
		try {
			activeSchueler.setFirstName(((SchuelerDetailView) main
					.getDetailView()).getFirstName());
			activeSchueler.setLastName(((SchuelerDetailView) main
					.getDetailView()).getLastName());
			activeSchueler
					.setGender(((SchuelerDetailView) main.getDetailView())
							.getGender());

			GregorianCalendar g = new GregorianCalendar();
			g.setTime(((SchuelerDetailView) main.getDetailView()).getBDay());
			activeSchueler.setBirthday(g);

			main.refresh();

		} catch (IOException e) {

			return !main.showError(Constants.msg
					.getString("serverNotConnected"));
		}

		return true;

	}

	public boolean saveRiege() {
		try {
			activeRiege.setRiegenFuehrer(((RiegeDetailView) main
					.getDetailView()).getRiegenFuehrer());

		} catch (IOException e) {
			return !main.showError(Constants.msg
					.getString("serverNotConnected"));
		}
		return true;
	}

	public void setActive(Schueler schueler, Riege riege) {
		activeRiege = riege;
		activeSchueler = schueler;
	}

	public boolean showError(String msg) {
		return main.showError(msg);
	}

	public boolean delete() {
		if (activeSchueler != null) {
			return deleteSchueler();
		} else {

			return deleteRiege();
		}
	}

	public boolean deleteSchueler() {
		try {
			main.removeSchueler(activeRiege, activeSchueler);
			activeRiege.removeSchueler(activeSchueler.getID());
			activeSchueler = null;

		} catch (IOException e) {

			return !main.showError(Constants.msg
					.getString("serverNotConnected"));
		}
		return true;
	}

	public boolean deleteRiege() {
		main.removeRiege(activeRiege);
		try {
			loader.removeRiege(activeRiege.getID());
		} catch (IOException e) {

			return !main.showError(Constants.msg
					.getString("serverNotConnected"));
		}
		activeRiege = null;
		return true;
	}

	public boolean importCSV(final File file) throws IOException {
			final CSVLoader l = new CSVLoader(loader, file);
			showProgressbar(true);
			System.out.println("importCSV");
			ArrayList<Schueler> sList = new ArrayList<Schueler>();
			
			
						while (l.hasNext()) {
							LocalSchueler s = null;
							try {
								s = l.nextSchueler();
							} catch (IOException e) {
								return showError("Problem with file");
							}
							sList.add(s);
						}
						SchuelerSorter.sort(sList, loader);
						try {
							loadRiegenView(loader);
						} catch (IOException e) {
							e.printStackTrace();
						}
			showProgressbar(false);

				
		return true;
	}

	public void showProgressbar(boolean b) {
	}
	
}
